package Sort;

import java.util.Arrays;

/**
 * @author Liangyaoyun
 */
public class ShellSort {
    //希尔排序是先少人多活，后多人少活
    //即对组内排序的人逐渐变多，有序化整体增加
    public void shellSort(int[] nums){
        if (nums.length==0&&nums==null){
            return;
        }
        int tmp;
        //相隔一定的距离抽牌比较
        int gap= nums.length/2;
        //
        //最外层循环用于控制排序工程中步长取值的迭代
        while (gap>=1){
            //用于选定[gap，n-1]范围内每一个元素执行以gap为间隔的插入排序操作
            for (int i = gap; i < nums.length ; i++) {
                //实现选定元素与前序下标取值间隔为gap的所有同组元素之间的比较和交换过程
                for (int j = i; j >=gap ; j-=gap) {
                    //如果前一张牌大于后面一张牌则交换位置
                    if (nums[j]<nums[j-gap]){
                        tmp=nums[j];
                        nums[j]=nums[j-gap];
                        nums[j-gap]=tmp;
                    }
                }
            }
            gap/=2;
        }
    }

    public static void main(String[] args) {
        int[] nums = new int[]{9, 7, 4, 3, 2, 8, 5, 1, 6, 0};
        ShellSort shellSort=new ShellSort();
        shellSort.shellSort(nums);
        System.out.println(Arrays.toString(nums));
    }
}
